最后更新时间:2019年6月17日
功能介绍
对空间数据的管理、查询与分析能力是衡量GIS平台的一个重要依据,地图查询是地理信息系统应该具备的最基础的功能,主要包括从空间位置检索空间物体及其属性、从属性条件集检索空间物体。地图查询也是移动GIS应用中最常用的核心功能之一,广泛应用于各类项目中。通过空间和属性条件查询地理要素,提取所需要素的空间与属性信息,与地图联动,进行展示,满足应用的需求。
MapGIS平台将空间信息与属性信息集中管理,通过扩展的结构化空间查询语言实现查询功能,支持空间数据查询功能。基于GIS的特性,地图要素查询可以分为空间几何查询、属性条件查询以及两者结合的复合查询。其中,空间几何查询有点查询、矩形查询、多边形查询三种基本方式,在实际引用中通常以交互操作的空间范围为限定条件进行查询;属性查询以要素属性限定条件进行查询;复合查询则是两者的结合,空间范围组合属性条件,统一查询满足要求的空间要素。
在MapGIS移动端,由于数据可分为离线和在线数据,所以从数据角度可以将地图查询分为离线数据查询、在线数据查询两类,每一类又与空间、属性、复合三种查询类型组合对应。如下图所示:
点击查询是空间条件查询一种,通过设置空间范围条件(即点几何图形),根据选择图层、范围条件对图层要素进行查询并显示查询结果。
矩形查询是空间条件查询一种,通过设置空间范围条件(即矩形),根据选择图层、范围条件对图层要素进行查询并显示查询结果。
多边形查询是空间条件查询一种,通过设置空间范围条件(即多边形),根据选择图层、范围条件对图层要素进行查询并显示查询结果。
属性条件查询,即为属性关键字查询,根据选择图层、字段、关键字对图层要素进行查询并显示查询结果。
复合条件查询,是属性条件与空间条件结合应用的查询方式,根据选择图层、字段、关键字,结合空间范围条件,对图层要素进行查询并显示查询结果。
功能接口
地图查询功能接口由com.zondy.mapgis.core.featureservice程序包中的FeatureQuery(要素查询类)、FeaturePagedResult(查询结果类)、Feature(要素对象类)等提供。FeatureQuery提供的查询核心接口如下:
接口 | 适用情况 |
---|---|
setQueryBound() | 设置查询范围 |
setWhereClause() | 设置属性查询条件 |
setSpatialFilterRelationship() | 设置空间过滤条件 |
query() | 查询 |
然后重点关注FeatureQuery的四个构造函数,如下表所示,适用的数据类型及应用场景都不同,根据具体情况选择对应的方法。
接口 | 适用数据 | 适用情况 |
---|---|---|
FeatureQuery(VectorLayer vectorLayer) | 离线/在线 | 离线数据最常用方法 通过矢量图层构造查询对象 |
FeatureQuery(IVectorCls cls) | 离线 | 只提供.mgdb数据库时采用 通过矢量类对象构造查询对象 |
FeatureQuery(java.lang.String strIGServerBaseURL, java.lang.String strDataURL) | 在线 | 能够获取在线图层数据的URL地址时采用 |
FeatureQuery(java.lang.String strIGServerBaseURL, java.lang.String strDocName, int mapID, int layerID) | 在线 | 能够获取到在线图层数据在地图文档中的ID时采用 |
下面来给出示例展示四种构造函数的用法:
(1) 通过矢量图层构造查询对象
//获取矢量图层 VectorLayer vectorLayer =(VectorLayer) mapView.getMap().getLayer(i); //构造查询对象 FeatureQuery featureQuery = new FeatureQuery(vectorLayer); //参数:矢量图层
(2) 通过矢量类构造查询对象
//构造数据库对象,并打开数据 DataBase dataBase=new DataBase(); dataBase.open("······/map/WuHan/武汉MKT.mgdb"); //构造简单要素类对象,并打开要素图层 SFeatureCls sFeatureCls=new SFeatureCls(database); sFeatureCls.open(i); //图层ID,从1开始 //构造查询对象 FeatureQuery featureQuery = new FeatureQuery(sFeatureCls); //矢量类对象
(3) 根据在线图层的URL构造查询对象
//根据服务基地址、图层URL构造查询对象 FeatureQuery featureQuery = new FeatureQuery("http://develop.smaryun.com:6163/igs","gdbp://MapGisLocal/武汉MKT/sfcls/武汉市");
(4) 根据在线图层的ID构造查询对象
//根据服务基地址、地图文档名称、地图索引、图层索引构造查询对象 FeatureQuery featureQuery = new FeatureQuery("http://develop.smaryun.com:6163/igs","WuHan",0,0);
提示:服务基地址即IGServer服务器所在的IP地址,其中图层图层URL、地图文档名称、地图ID、图层ID可以在MapGIS Server Manager中获取,具体方法在在线数据组织模块已经介绍,在此不赘述。
实现方法
(1) 构造查询对象:根据不同的地图数据,选择不同的查询类(FeatureQuery)构造函数,准备对应方法中的参数对象,然后构造查询对象。
(2) 设置查询条件:通过setWhereClause()设置属性条件、setQueryBound()设置空间范围条件,还可设置空间过滤条件、每页结果数目等参数。
(3) 查询并获取结果:通过FeatureQuery对象调用query()方法进行查询,返回查询结果集为FeaturePagedResult。
(4) 结果展示:解析FeaturePagedResult,将查询得到的结果要素Feature进行展示,一般可通过高亮、标注、列表等形式展现,也可获取其几何、属性信息。